
/**********************************************************************************\
** 文件名称: cmd.c
** 创建人员: YCG
** 创建日期: 2018-12-22
** 文档描述:
** 版本代号: V0.1
** 版本说明: 初始版本
\********************************************************************************/

/********************************End of File************************************/
/**********************************************************************************\
** 文件名称: cmd.c
** 创建人员: YCG
** 创建日期: 2018-12-22
** 文档描述:
1.用uint32_t类型定义一个存放命令的缓存，每一个代表一个命令，一个可以定义32个命令
2.每个命令可以携带一个32位的数据

** 版本代号: V0.1
** 版本说明: 初始版本
\********************************************************************************/
#include "cmd.h"
#ifdef CMD_USE_CACHE
const uint32_t BIT[32] = {
    0x00000001, 0x00000002, 0x00000004, 0x00000008, 0x00000010, 0x00000020, 0x00000040, 0x00000080,
    0x00000100, 0x00000200, 0x00000400, 0x00000800, 0x00001000, 0x00002000, 0x00004000, 0x00008000,
    0x00010000, 0x00020000, 0x00040000, 0x00080000, 0x00100000, 0x00200000, 0x00400000, 0x00800000,
    0x01000000, 0x02000000, 0x04000000, 0x08000000, 0x10000000, 0x20000000, 0x40000000, 0x80000000
};
#endif

static volatile uint32_t Cmd = 0;    //命令存放缓存
static uint8_t CmdDat[32];

/*******************************************************************************
** 函数名称: SendCmd
** 功能描述: 设置相应的命令
** 参数说明: pxCmd: [输入]   设置的命令
** 返回说明: None
** 创建人员: YCG
** 创建日期: 2018-12-22
********************************************************************************/
void SendCmd(uint8_t pxCmd) {

#ifdef CMD_USE_CACHE
    Cmd |= BIT[pxCmd];
#else
    Cmd |= (0x00000001 << pxCmd);
#endif
	
    CmdSendCallBack();
}

/*******************************************************************************
** 函数名称: SendCmdDat
** 功能描述: 设置命令，带数据
** 参数说明: pxCmd: [输入/出]  命令
**			 pxCmdDat: [输入/出]   数据
** 返回说明: None
** 创建人员: YCG
** 创建日期: 2018-12-22
********************************************************************************/
void SendCmdDat(uint8_t pxCmd, uint8_t pxCmdDat) {
	
    CmdDat[pxCmd] = pxCmdDat;
#ifdef CMD_USE_CACHE
    Cmd |= BIT[pxCmd];
#else
    Cmd |= (0x00000001 << pxCmd);
#endif
	CMD_Printf("Send:%2d  命令：%8x  数据：%2d\r\n",pxCmd,Cmd,CmdDat[pxCmd]);
    CmdSendCallBack();
}

/*******************************************************************************
** 函数名称: GetCmd
** 功能描述: 获取命令
** 参数说明: pxCmd: [输入] 需要获取的命令
** 返回说明: None
** 创建人员: YCG
** 创建日期: 2018-12-22
********************************************************************************/
uint8_t GetCmd(uint8_t pxCmd) {
	
#ifdef CMD_USE_CACHE
    if(Cmd & BIT[pxCmd]) {
        Cmd &= ~ BIT[pxCmd];
#else
    if(pxCmd & (0x00000001 << pxCmd)) {
        Cmd &= ~(0x00000001 << pxCmd);
#endif
			
	CMD_Printf("Get:%2d  成功\r\n",pxCmd);
        return 1;
    } else {
	CMD_Printf("Get:%2d  失败\r\n",pxCmd);
        return 0;
    }
}

/*******************************************************************************
** 函数名称: GetCmdDat
** 功能描述: 获取命令的数据
** 参数说明: pxCmd: [输入/出] 命令
** 返回说明: None
** 创建人员: YCG
** 创建日期: 2018-12-22
********************************************************************************/
uint8_t GetCmdDat(uint8_t pxCmd) {
	CMD_Printf("Get:%2d  数据%2d\r\n",pxCmd,CmdDat[pxCmd]);
    return CmdDat[pxCmd];
}

/*******************************************************************************
** 函数名称: CmdSendCallBack
** 功能描述: 命令发送后的回调函数，用户自己定义
** 参数说明: None
** 返回说明: None
** 创建人员: YCG
** 创建日期: 2018-12-22
********************************************************************************/
__weak void CmdSendCallBack(void) {

}
/********************************End of File************************************/
